const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');

const app = express();
const PORT = process.env.PORT || 5001;
const JWT_SECRET = 'xuxiao'; // 在实际生产环境中应该使用环境变量

// 中间件
app.use(cors());
app.use(bodyParser.json());

// 模拟用户数据库
const users = [
  {
    id: 1,
    username: 'admin',
    // 密码: admin123
    password: '$2a$10$yNl2Mup.3ziY.4EKYpPUaerap.L2QVgeLqt.g.eDAf38SD1uOU.cu'
  }
];

// 路由
app.get('/', (req, res) => {
  res.send('API 运行中...');
});

// 用户登录
app.post('/api/login', async (req, res) => {
  const { username, password } = req.body;

  // 验证
  if (!username || !password) {
    return res.status(400).json({ msg: '请提供用户名和密码' });
  }

  try {
    // 检查用户是否存在
    const user = users.find(user => user.username === username);
    if (!user) {
      return res.status(400).json({ msg: '用户不存在' });
    }

    // 验证密码
    const isMatch = await bcrypt.compare(password, user.password);
    if (!isMatch) {
      return res.status(400).json({ msg: '密码不正确' });
    }

    // 创建 JWT Token
    const payload = {
      user: {
        id: user.id
      }
    };

    jwt.sign(
      payload,
      JWT_SECRET,
      { expiresIn: '1h' },
      (err, token) => {
        if (err) throw err;
        res.json({ token });
      }
    );
  } catch (err) {
    console.error(err.message);
    res.status(500).send('服务器错误');
  }
});

// 获取当前用户信息（需要验证）
app.get('/api/user', (req, res) => {
  try {
    // 从请求头获取 token
    const token = req.header('x-auth-token');
    
    if (!token) {
      return res.status(401).json({ msg: '没有令牌，授权失败' });
    }

    // 验证 token
    const decoded = jwt.verify(token, JWT_SECRET);
    const user = users.find(user => user.id === decoded.user.id);
    
    if (!user) {
      return res.status(404).json({ msg: '用户不存在' });
    }

    // 返回用户信息（不包括密码）
    res.json({
      id: user.id,
      username: user.username
    });
  } catch (err) {
    res.status(401).json({ msg: '令牌无效' });
  }
});

app.listen(PORT, () => console.log(`服务器运行在端口 ${PORT}`));